package com.mixsmart.core.dao;

import java.io.Serializable;
import java.util.ArrayList;

import com.mixsmart.core.bean.entity.IEntityBean;
import com.mixsmart.spellsql.ICondition;

/**
 * 删除实体DAO接口
 * @author lmq
 * @version 1.0
 * @since JDK版本大于等于1.6
 * 2015年12月21日
 * @param <T>
 * @param <PK>
 */
public interface IDeleteEntityDao<T extends IEntityBean, PK extends Serializable> extends IDeleteDao {

	/**
	 * 根据实体Bean删除
	 * @param t 实体对象
	 * @return 成功返回：true；否则返回：false
	 */
	public boolean delete(T t);
	
	/**
	 * 根据主键删除
	 * @param id 主键值
	 * @return 成功返回：true；否则返回：false
	 */
	public boolean delete(PK id);
	
	/**
	 * 根据主键删除
	 * @param ids 主键数组
	 * @return 成功返回：true；否则返回：false
	 */
	public boolean delete(PK[] ids);
	
	/**
	 * 根据主键删除
	 * @param clazz
	 * @param id 主键值
	 * @return 成功返回：true；否则返回：false
	 */
	public boolean delete(Class<? extends IEntityBean> clazz,PK id);
	
	/**
	 * 根据主键删除
	 * @param clazz
	 * @param ids 主键数组
	 * @return 成功返回：true；否则返回：false
	 */
	public boolean delete(Class<? extends IEntityBean> clazz,PK[] ids);
	
	
	/**
	 * 根据实体对象集合批量删除
	 * @param ts 实体对象集合
	 * @return 成功返回：true；否则返回：false
	 */
	public boolean delete(ArrayList<T> ts);
	
	/**
	 * 根据条件删除
	 * @param condition 条件对象 <br />
	 * 通过{@link com.mixsmart.spellsql.utils.Cnd}.方法名({@link com.mixsmart.spellsql.utils.Exp}.方法名())来设置条件；<br />
	 * 如：Cnd.where(Exp.eq("name","张三"))
	 * @return 成功返回：true；否则返回：false
	 */
	public boolean delete(ICondition condition);
	
}
